\begin{center}
\begin{tikzpicture}[thick,scale=0.85, every node/.style={scale=0.85}]
	\tikzstyle{every path}=[thick]
	\tikzstyle{undefined}=[draw,rectangle,minimum height=1cm, minimum width=3.5cm, text width=3.5cm]
	\tikzstyle{undefinedw}=[draw,rectangle,minimum height=1cm, minimum width=4.5cm, text width=4.5cm]
	\tikzstyle{node}=[draw,rectangle,minimum height=1cm, minimum width=3.5cm, text width=3.5cm, fill=gray!20]
	\tikzstyle{nodew}=[draw,rectangle,minimum height=1cm, minimum width=4.5cm, text width=4.5cm, fill=gray!20]
	\tikzstyle{text_as_rect}=[rectangle,minimum height=1cm, minimum width=3.5cm, text width=3.5cm]
	\tikzstyle{point}=[inner sep=0pt]

	\node[node] (fs) [minimum width=1.5cm, text width=1.5cm] {FS:0};

\begin{scope}[start chain=1 going below, node distance=0cm]
	\node[on chain=1,node] (tib1) [right=1.5cm of fs] {+0: \_\_except\_list};
	\node[on chain=1,undefined] {+4: \dots};
	\node[on chain=1,undefined] {+8: \dots};
\end{scope}
	\node (tib_text) [above of=tib1] {TIB};
	
	\draw [->] (fs.east) -- (tib1.west);

\begin{scope}[start chain=3 going below, node distance=0cm]
	\node[on chain=3,undefined] (u1) [text centered, right=2.5cm of tib1] {\dots};
	%\node[on chain=3,node] (n1prev) {Prev=0xFFFFFFFF (1)};
	\node[on chain=3,node] (n1prev) {Prev=0xFFFFFFFF};
	\node[on chain=3,node] (n1handler) {Handle};
	\node[on chain=3,undefined] [text centered] {\dots};
	\node[on chain=3,node] (n2prev) {Prev};
	\node[on chain=3,node] (n2handler) {Handle};
	\node[on chain=3,undefined] [text centered] {\dots};
	\node[on chain=3,node] (n3prev) {Prev};
	\node[on chain=3,node] (n3handler) {Handle};
	\ifx\SEHfour\undefined	
	\node[on chain=3,node] (n3scopetable) {\ScopeTable};
	\else
	\node[on chain=3,node] (n3scopetable) {\ScopeTable$\oplus$security\_cookie};
	\fi
	\node[on chain=3,node] {\RU{предыдущий уровень try}\EN{previous try level}};
	\node[on chain=3,node] (n3ebp) {EBP};
	\ifx\SEHfour\undefined
	\else
	\node[on chain=3,undefined] [text centered] {\dots};
	\node[on chain=3,node] (AnotherCookie) {EBP$\oplus$security\_cookie};
	\node[on chain=3,undefined] [text centered] {\dots};
	\fi
\end{scope}
	
	\node [node] (n1handler_text) [right=1cm of n1handler] {\HandlerFunction};
	\draw [->] (n1handler.east) -- (n1handler_text.west);
	\node [node] (n2handler_text) [right=1cm of n2handler] {\HandlerFunction};
	\draw [->] (n2handler.east) -- (n2handler_text.west);

	\ifx\SEHfour\undefined	
	\node [node] (n3handler_text) [right=1cm of n3handler] {\_except\_handler3};
	\else
	\node [node] (n3handler_text) [right=1cm of n3handler] {\_except\_handler4};
	\fi

	\draw [->] (n3handler.east) -- (n3handler_text.west);
	\node[undefined] (u4) [text centered, below of=n3ebp] {\dots};
	\node (stack_text) [above of=u1] {Stack};
	
	\node[point] (n2block_pt2) [above left=0cm and 0.8cm of n2prev] {};
	\draw [->] (n3prev.west) .. controls +(left:0.8cm) and (n2block_pt2) .. (n2prev.north west);

	\node[point] (n1block_pt2) [above left=0cm and 0.8cm of n1prev] {};
	\draw [->] (n2prev.west) .. controls +(left:0.8cm) and (n1block_pt2) .. (n1prev.north west);
	
	\node[point] (n3block_pt2) [above left=0cm and 1.25cm of n3prev] {};
	\draw [->] (tib1.east) .. controls +(right:1.25cm) and (n3block_pt2) .. (n3prev.north west);

\begin{scope}[start chain=2 going below, node distance=0cm]
	% SEH3
	\ifx\SEHfour\undefined	
	\node[on chain=2,nodew] (scope_tbl) [left=3.5cm of n2handler] {0xFFFFFFFF (-1)};
	\else
	% SEH4 header
	\node[on chain=2,nodew] (scope_tbl) [left=3.5 cm of n2handler] {\RU{смещение GS Cookie}\EN{GS Cookie Offset}};
	\node[on chain=2,nodew] {\RU{смещение GS Cookie XOR}\EN{GS Cookie XOR Offset}};
	\node[on chain=2,nodew] (EHCookieOffset) {\RU{смещение EH Cookie}\EN{EH Cookie Offset}};
	\node[on chain=2,nodew] {\RU{смещение EH Cookie XOR}\EN{EH Cookie XOR Offset}};
	\node[on chain=2,minimum height=0.3cm] {};
	\node[on chain=2,nodew] {0xFFFFFFFF (-1)};
	\fi

	\node[on chain=2,nodew] (scope_tbl_filter1) {\FilterFunction};
	\node[on chain=2,nodew] {\HandlerFinallyFunction};
	\node[on chain=2,minimum height=0.3cm] {};
	\node[on chain=2,nodew] {0};
	\node[on chain=2,nodew] (scope_tbl_filter2) {\FilterFunction};
	\node[on chain=2,nodew] {\HandlerFinallyFunction};
	\node[on chain=2,minimum height=0.3cm] {};
	\node[on chain=2,nodew] {1};
	\node[on chain=2,nodew] (scope_tbl_filter3) {\FilterFunction};
	\node[on chain=2,nodew] {\HandlerFinallyFunction};
	\node[on chain=2,minimum height=0.3cm] {};
	\node[on chain=2,undefinedw] [text centered] {\dots \MoreEntries \dots};

\end{scope}
	
	\node[text_as_rect,left=0.5cm of scope_tbl_filter1] {\RU{информация для первого блока try/except}\EN{information about first try/except block}};
	\node[text_as_rect,left=0.5cm of scope_tbl_filter2] {\RU{информация для второго блока try/except}\EN{information about second try/except block}};
	\node[text_as_rect,left=0.5cm of scope_tbl_filter3] {\RU{информация для третьего блока try/except}\EN{information about third try/except block}};

	\node (scope_text) [above of=scope_tbl] {\ScopeTable};
	\node[point] (scope_table_pt2) [right=1.75cm of scope_tbl] {};
	\draw [->] (n3scopetable.west) .. controls +(left:1.75cm) and (scope_table_pt2) .. (scope_tbl.north east);

	\ifx\SEHfour\undefined
	\else
	\node[point] (AnotherCookie_pt2) [left=1.75cm of AnotherCookie] {};
	\draw [->] (EHCookieOffset.east) .. controls +(right:1.75cm) and (AnotherCookie_pt2) .. (AnotherCookie.west);
	\fi

\end{tikzpicture}
\end{center}
